#include <iostream>

using namespace std;

template <class T>
class Juego_vida{
  public:
    Juego_vida(int fil,int col):fi(fil),co(col){
       mat= new T*[fi];
       for(int i=0;i<fi;i++)
           mat[i]=new T[co];

    };
    void initialize(){
      for(int i=0;i<fi;i++){
        for(int j=0;j<co;j++)
          mat[i][j]=".";
      }
    };
    void print(){
       for(int i=0; i<fi; i++){
          for(int j=0; j<co; j++){
            cout << mat[i][j];
        }
        cout << endl;
       }
    };
    int count_neighbors(int i,int j);

    void iterate(){
        int sum;
    int k,l,j,i;
    for(k=1;k<fi;k++){  //filas que se encuentran en el extremo de la matriz
        if(mat[0][k]=="*"){
            sum = (mat[0][k+1]+mat[0][k-1]+mat[1][k+1]+mat[1][k]+mat[1][k-1])%42;
            if(sum<12 || sum>8)
                mat[0][k]=".";
        }
        else{
            sum = (mat[0][k+1]+mat[0][k-1]+mat[1][k+1]+mat[1][k]+mat[1][k-1])%42;
            if(sum==8)
                mat[0][k]="*";
        }
        if(mat[fi-1][k]=="*"){
            sum = (mat[fi-1][k+1]+mat[fi-1][k-1]+mat[fi-2][k-1]+mat[fi-2][k]+mat[fi-2][k+1])%42;
            if(sum<12 || sum>8)
                mat[0][k]=".";
        }

        else{
            sum = (mat[fi-1][k+1]+mat[fi-1][k-1]+mat[fi-2][k+1]+mat[fi-2][k]+mat[fi-2][k-1])%42;
            if(sum==8)
                mat[0][k]="*";
        }

    }
    for(l=1;l<co;l++){  //las columnas que se encuentran en el extremo de la matriz
        if(mat[l][0]=="*"){
            sum = (mat[l][1]+mat[l-1][0]+mat[l+1][0]+mat[l+1][1]+mat[l-1][1])%42;
            if(sum<12 || sum>8)
                mat[l][0]=".";
        }
        else{
            sum = (mat[l][1]+mat[l-1][0]+mat[l+1][0]+mat[l+1][1]+mat[l-1][1])%42;
            if(sum==8)
                mat[l][0]="*";
        }
        if(mat[l][co-1]=="*"){
            sum = (mat[l][co-1]+mat[l-1][co-1]+mat[l+1][co-1]+mat[l+1][co-2]+mat[l-1][co-2])%42;
            if(sum<12 || sum>8)
                mat[l][co-1]=".";
        }
        else{
            sum = (mat[l][co-2]+mat[l-1][co-1]+mat[l+1][co-1]+mat[l+1][co-2]+mat[l-1][co-2])%42;
            if(sum==8)
                mat[l][co-1]="*";
        }

    }

//Estas condiciones son para los puntos extremos de la matriz

    if(mat[0][0]=="*"){
        if((mat[0][1]+mat[1][0]+mat[1][1])%42>8)
            mat[0][0]=".";
    }
    else{
        if((mat[0][1]+mat[1][0]+mat[1][1])%42==0)
            mat[0][0]="*";
    }

    if(mat[0][co-1]=="*"){
        if((mat[0][co-2]+mat[1][co-1]+mat[1][co-2])%42>8)
            mat[0][0]=".";
    }
    else{
         if((mat[0][co-2]+mat[1][co-1]+mat[1][co-2])%42==0)
            mat[0][0]="*";
    }

    if(mat[fi-1][0]=="*"){
        if((mat[fi-2][0]+mat[fi-1][1]+mat[fi-2][1])%42>8)
            mat[fi-1][0]=".";
    }
    else{
        if((mat[fi-2][0]+mat[fi-1][1]+mat[fi-2][1])%42==0)
            mat[fi-1][0]="*";
    }

    if(mat[fi-1][co-1]==1){
        if((mat[fi-2][18]+mat[fi-1][18]+mat[fi-2][co-1])%42>8)
            mat[fi-1][co-1]=".";
    }
    else{
        if((mat[fi-2][18]+mat[fi-1][18]+mat[fi-2][co-1])==0)
            mat[fi-1][co-1]="*";

    }


    for(j=1;j<19;j++){
        for(i=1;i<19;i++){
            sum = (mat[i-1][j]+mat[i+1][j]+mat[i][j-1] +mat[i-1][j-1] +mat[i+1][j-1] +mat[i][j+1] +mat[i+1][j+1] +mat[i-1][j+1])%42;
            if(mat[i][j]=="*"){
                if(sum<12 || sum>8)
                    mat[i][j]=".";
            }
            else{
                if(sum==8)
                    mat[i][j]="*";
            }
        }
    }
}

    void simulate_life(int count);

  private:
    T** mat;
    int* posic;
    int fi;
    int co;

};


int main()
{
    Juego_vida <char> prueb(8,2);
    char x= '.';
    cout<<x*1;
    /*
    prueb.initialize();
    prueb.print();
    */

    return 0;
}
